Skip to content

fix(console): type-check tsconfig.node.json and wire it into the gate (#3305) - #3383

Merged
yinlianghui merged 2 commits into
mainfrom
claude/issue-3305-console-tsconfig-node-gate
Aug 5, 2026
Merged

fix(console): type-check tsconfig.node.json and wire it into the gate (#3305)#3383
yinlianghui merged 2 commits into
mainfrom
claude/issue-3305-console-tsconfig-node-gate

Conversation

@yinlianghui

@yinlianghui yinlianghui commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Fixes #3305

复核:premise 成立,且错误已从 5 条涨到 7 条

Issue 的基线是 f44d8727f,当前 origin/main(0554e889c)重跑,7 条:

$ pnpm exec tsc -b apps/console/tsconfig.node.json --force
apps/console/vite.config.ts(6,32): error TS6307: File '.../scripts/vite-crypto-stub.ts' is not listed within the file list of project ...
apps/console/vite.config.ts(7,36): error TS6307: File '.../scripts/vite-maplibre-worker.ts' is not listed within the file list of project ...
apps/console/vite.config.ts(189,9): error TS2561: ... 'algorithm' does not exist in type 'ViteCompressionPluginOption'. Did you mean to write 'algorithms'?
apps/console/vite.config.ts(194,9): error TS2561: ... 同上
apps/console/vite.config.ts(292,3): error TS2769: ... 'test' does not exist in type 'UserConfigExport'.
scripts/vite-crypto-stub.ts(1,29): error TS2307: Cannot find module 'vite' or its corresponding type declarations.
scripts/vite-maplibre-worker.ts(9,68): error TS2307: Cannot find module 'vite' or its corresponding type declarations.

多出的 2 条来自 issue 提出后新落的 scripts/vite-maplibre-worker.ts —— 正好实证了 issue 里那句预判:「任何住在 scripts/ 的共享 vite 插件都会继承这个问题」。没门禁的文件会持续吸附新错误。

一处需要更正 issue 的判断:algorithm 在运行时是失效的

Issue 说「实证 build 仍产 .gz 与 .br,所以运行时认这个键,属类型/运行时错位」。读已安装的 vite-plugin-compression2@2.5.3 运行时源码,这个归因是错的:

// node_modules/vite-plugin-compression2/dist/index.mjs
let { ..., algorithms: d = ["gzip", "brotliCompress"], ... } = n;

algorithm(单数)根本不在解构列表里,从头到尾没被读过。两份 .gz/.br 不是因为运行时认了这个键,而是因为它落到了默认值 —— 而默认值是两个算法都做。也就是说这两个 plugin 实例各自都在做 gzip + brotli,每个产物被压了两遍。旧 build 日志里 dist/vite.svg.br 连续出现两次就是这个重复的痕迹。

结论不变(该修),但性质不是「类型说错了、运行时是对的」,而是两端都错,只是默认值恰好掩盖了它。修完每个实例只做自己那一个算法,重复功耗消失。

三个问题的修法

  1. algorithmalgorithms: [...],以已安装插件声明的键为准。
  2. scripts/vite-*.ts 的类型解析路径 —— 选择「留在 scripts/,补声明」而不是搬走。理由:scripts/ 是本仓刻意维护的仓库级 TS 代码位置(root vitest.config.mtsunit project 显式 include 了 scripts/**/*.test.ts,那里现有 6 个测试文件);而 root package.json 本来就替 console 声明着 vite-plugin-compression2rollup-plugin-visualizer。所以补一条 root vite devDependency 是顺着既有约定走,搬文件反而要连带搬测试、动 root vitest 的 include。已核验 root 与 apps/console 解析到同一份 vite@8.2.0(realpath 相同),Plugin 不会裂成两个类型。
  3. defineConfig 改从 vitest/config 导入 —— vite.config.tstest 块确实是活的(apps/console/vitest.config.tsmergeConfig 合了进去),而 vitest.config.ts 自己早就是从 vitest/config 导入的,这里只是对齐。

接线(本单主交付)—— 两层,少一层就是假绿

第一层:console 的 type-check 真的跑这个 project

-"type-check": "tsc --noEmit",
+"type-check": "tsc --noEmit && tsc -b tsconfig.node.json --force",

apps/console/package.jsontype-check,即 CI ci.ymlpnpm type-check 的既有挂点,不新增 workflow。

--force 是有承载作用的,不是保险丝。 我第一版写的是不带 --forcetsc -b,反向验证第 4 例(删掉 root 的 vite 解析)时它报了绿 —— build 模式的 up-to-date 检查认为项目没变就整个跳过了。只有输入文件变化时才重跑,依赖变化会假绿。加 --force 后同一例正确变红。

第二层:turbo 的缓存 key 必须覆盖 scripts/vite-*.ts

第一层写完后我去验第二层,发现接了等于没接type-check 任务没声明 inputs,turbo 只按各 package 自己目录下的文件算 hash;而这道门禁读的 scripts/vite-*.ts 在仓库根、不属于任何 package。

实测(改动前):

# 把 scripts/vite-crypto-stub.ts 改出一个真实类型错误后
@object-ui/console:type-check: cache hit, replaying logs 9b56b04fee5b19cc   # 与改动前同一个 hash
TURBO_EXIT=0                                                                # 绿

# 同一棵树上直接跑这条脚本:
../../scripts/vite-crypto-stub.ts(33,7): error TS2322: Type 'string' is not assignable to type 'number'.
DIRECT_EXIT=1                                                               # 红

CI 是跨 run 恢复 turbo 缓存的(restore-keys: turbo-${{ runner.os }}-type-check-),所以这个假绿在 CI 上同样可达,不只是本地现象。

修法是给任务补 inputs($TURBO_DEFAULT$ 放第一位,不收窄任何既有行为):

"inputs": ["$TURBO_DEFAULT$", "$TURBO_ROOT$/scripts/vite-*.ts"]

改动后同一实验:

改动前基线:  cache miss, executing b804f2284a20c21d   TURBO_EXIT=0
改坏 script:  cache miss, executing 14b3af20777c366d   TURBO_EXIT=1  + TS2322   # hash 变了,红了
恢复 script:  cache hit,  replaying b804f2284a20c21d   TURBO_EXIT=0

这是本 PR 唯一一处超出 issue 文件面的改动(turbo.json 一处 inputs),属于接线本身的必要组成 —— 不补这层,第一层的门禁在 CI 上可以被缓存整个跳过。

验证

门禁绿:

$ pnpm --filter @object-ui/console type-check
> tsc --noEmit && tsc -b tsconfig.node.json --force
EXIT=0        # 工作树无新增未跟踪文件

反向验证(防再腐)—— 预期方向事先声明:门禁就是一个编译器直接编译这几个文件,不存在计数/反转的微妙情况,五例都应当变红:

改动 结果
1 algorithms 退回 algorithm 红 · TS2561 x2
2 defineConfig 退回从 vite 导入 红 · TS2769
3 include 去掉 ../../scripts/vite-*.ts 红 · TS6307 x2
4 移除 root 的 vite 解析 红 · TS2307 x2
5 改坏 scripts/vite-crypto-stub.ts,经 turbo run type-check 红 · TS2322(补 inputs 前是绿,见上)

全部按预期变红,恢复后基线 EXIT=0

.gz/.br 双产物实证(PM 要求): 分别用修前(algorithm)与修后(algorithms)各跑一次 vite build,对产物清单做 diff:

before: 898 files | after: 898 files
RESULT: artifact sets are BYTE-IDENTICAL (no diff)
  .gz count: 449
  .br count: 449

产物集合完全不变,双算法照常产出;变化的只是不再压两遍。

测试:

$ pnpm exec vitest run --project unit --maxWorkers=2 scripts/__tests__
  Test Files  6 passed (6)   Tests  61 passed (61)

$ cd apps/console && pnpm exec vitest run --maxWorkers=2
  Test Files  22 passed (22)  Tests  208 passed (208)

$ node scripts/check-type-check-coverage.mjs
  type-check coverage: 43/45 via `type-check`, ... 0 known-broken
$ node scripts/check-changeset-fixed.mjs && node scripts/check-changeset-no-major.mjs
  All workspace packages are in the changeset fixed group. / No changeset declares a `major` bump.
$ pnpm exec eslint vite.config.ts     # EXIT=0

实现细节:为什么不是 noEmit

tsconfig.json 引用了这个 project,而被引用的 project 不许 noEmit(TS6310,实测会把现有的 tsc --noEmit 一起打红)。保持默认又会在每个输入旁边吐 .js/.d.ts(apps/console/vite.config.jsscripts/vite-*.d.ts),这堆未跟踪垃圾本身就是它当初难以接进门禁的原因之一。因此 outDir 指向 gitignore 覆盖的 node_modules/.cache/tsc/console-node,并显式写 rootDir: "../.."(composite 会把 rootDir 默认成本文件所在目录,导致 ../../scripts/*.ts 越界 TS6059)。

关于 changeset

未附 changeset,按 AGENTS.md「功能改进需写 changeset;纯 bug 修复不需要」。本 PR 无任何用户可见变化 —— 构建产物集合已实证逐字节相同,改动全部落在类型门禁与构建工具链上;而 objectui 是 39 包 fixed 组联动发布,为纯工具链改动推一次全组版本并不合适。如果维护者希望留一条发布记录,我再补一个 patch changeset。

附带发现(未在本 PR 修,已另开 issue)

…#3305)

apps/console/tsconfig.node.json is the project covering vite.config.ts, and
nothing ran it: `build` is `tsc && vite build && …`, and plain `tsc` reads
tsconfig.json without building project references. The file deciding how the
console is bundled was the one file in the app no gate read, and it had
accumulated 7 standing errors (5 at the issue's baseline, plus 2 more from
scripts/vite-maplibre-worker.ts landing since).

Three defects, fixed at their source:

- `compression({ algorithm })` -> `algorithms: [...]`. The singular key is not
  in vite-plugin-compression2's ViteCompressionPluginOption and was never read
  at runtime either; it fell through to the plugin default, which is BOTH
  `['gzip', 'brotliCompress']`. So each of the two instances compressed every
  asset twice. The .gz/.br pair that made the build look correct came from the
  default, not from these options. Artifact set is unchanged (449 .gz + 449
  .br, byte-identical file list before and after); the duplicated work is gone.
- scripts/vite-*.ts were unresolvable from this project (TS6307 + TS2307).
  They stay in scripts/ — a deliberate root-level location the root vitest
  project already covers via `scripts/**/*.test.ts` — and instead the root
  package.json now declares the `vite` it imports, matching how it already
  declares console's other Vite plugins (vite-plugin-compression2,
  rollup-plugin-visualizer). Root and apps/console resolve the identical
  vite@8.2.0 install, so `Plugin` stays one type.
- `defineConfig` now comes from `vitest/config`, so the `test` block (merged
  into vitest.config.ts) is typed instead of falling outside UserConfigExport.

Wiring, which is the point of the issue: console's `type-check` now also runs
`tsc -b tsconfig.node.json --force`. `--force` is load-bearing — without it the
build-mode up-to-date check skips the project when only dependencies changed,
which silently reported green while `vite` was unresolvable.

The project emits to a gitignored cache dir rather than `noEmit`, because
tsconfig.json references it and a referenced project that disables emit is
TS6310; left at the default it littered .js/.d.ts beside every input.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 5, 2026 11:52am

Request Review

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-DPCx4NSq.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.47KB 3.09KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
auth (index.js) 2.35KB 1.07KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 4.91KB 0.87KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 18.38KB 4.49KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 3.65KB 1.42KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.25KB 0.53KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 477.32KB 104.75KB
core (index.js) 2.25KB 0.80KB
create-plugin (index.js) 9.28KB 2.98KB
data-objectstack (index.js) 136.23KB 34.75KB
fields (index.js) 227.18KB 55.72KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 26.14KB 6.07KB
i18n (useSafeTranslation.js) 3.26KB 1.44KB
layout (index.js) 38.53KB 10.71KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.74KB
mobile (index.js) 1.50KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.05KB 1.53KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 44.98KB 12.37KB
plugin-charts (index.js) 60.83KB 17.25KB
plugin-chatbot (index.js) 180.09KB 42.72KB
plugin-dashboard (index.js) 112.01KB 28.86KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 231.29KB 57.04KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 111.54KB 26.97KB
plugin-gantt (index.js) 162.25KB 39.55KB
plugin-grid (index.js) 185.08KB 49.04KB
plugin-kanban (index.js) 47.89KB 13.18KB
plugin-list (index.js) 105.02KB 25.36KB
plugin-map (index.js) 16.81KB 5.24KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.55KB 10.59KB
plugin-timeline (index.js) 25.76KB 7.33KB
plugin-tree (index.js) 8.34KB 2.82KB
plugin-view (index.js) 83.67KB 20.43KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 19.28KB 6.38KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.02KB 0.55KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 2.46KB 1.21KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 0.20KB 0.18KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

…3305)

Wiring the tsconfig.node.json project into `type-check` is only half a gate if
`pnpm type-check` can serve a cached green for it. `type-check` declared no
`inputs`, so turbo hashed only each package's own files — and the project this
gate added reads `scripts/vite-*.ts`, which live at the repo root, inside no
package.

Measured before this change: breaking `scripts/vite-crypto-stub.ts` left
`@object-ui/console:type-check` on the identical hash 9b56b04fee5b19cc,
"cache hit, replaying logs", turbo exit 0 — while running the same script
directly reported TS2322. CI restores a turbo cache across runs
(`restore-keys: turbo-${{ runner.os }}-type-check-`), so that stale green was
reachable there, not just locally.

With `$TURBO_ROOT$/scripts/vite-*.ts` added to the task's inputs, the same
experiment gives a different hash (14b3af20777c366d), "cache miss, executing",
and turbo exit 1 with the real error; restoring the file returns a cache hit on
the original hash. `$TURBO_DEFAULT$` is listed first so nothing is narrowed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-DPCx4NSq.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.47KB 3.09KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
auth (index.js) 2.35KB 1.07KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 4.91KB 0.87KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 18.38KB 4.49KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 3.65KB 1.42KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.25KB 0.53KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 477.32KB 104.75KB
core (index.js) 2.25KB 0.80KB
create-plugin (index.js) 9.28KB 2.98KB
data-objectstack (index.js) 136.23KB 34.75KB
fields (index.js) 227.18KB 55.72KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 26.14KB 6.07KB
i18n (useSafeTranslation.js) 3.26KB 1.44KB
layout (index.js) 38.53KB 10.71KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.74KB
mobile (index.js) 1.50KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.05KB 1.53KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 44.98KB 12.37KB
plugin-charts (index.js) 60.83KB 17.25KB
plugin-chatbot (index.js) 180.09KB 42.72KB
plugin-dashboard (index.js) 112.01KB 28.86KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 231.29KB 57.04KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 111.54KB 26.97KB
plugin-gantt (index.js) 162.25KB 39.55KB
plugin-grid (index.js) 185.08KB 49.04KB
plugin-kanban (index.js) 47.89KB 13.18KB
plugin-list (index.js) 105.02KB 25.36KB
plugin-map (index.js) 16.81KB 5.24KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.55KB 10.59KB
plugin-timeline (index.js) 25.76KB 7.33KB
plugin-tree (index.js) 8.34KB 2.82KB
plugin-view (index.js) 83.67KB 20.43KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 19.28KB 6.38KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.02KB 0.55KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 2.46KB 1.21KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 0.20KB 0.18KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@yinlianghui
yinlianghui marked this pull request as ready for review August 5, 2026 12:03
@yinlianghui
yinlianghui added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 3aba002 Aug 5, 2026
15 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-3305-console-tsconfig-node-gate branch August 5, 2026 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

apps/console/tsconfig.node.json never type-checks — 5 standing errors, including two that say the compression options are typed wrong

2 participants